home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1999 March
/
EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso
/
earcd
/
-archivi
/
-recent2
/
gaplib.lha
/
GAPLib_Beta
/
include
/
GAP.h
next >
Wrap
C/C++ Source or Header
|
1999-01-27
|
5KB
|
132 lines
/*
* GAP-Lib (C)1998 Peter Bengtsson
* The Genetic Algorithm Programming Library.
*
*/
#ifndef __GAP_H__
#define __GAP_H__
#ifndef TAG_DONE /* This should be defined if tags are already defined. */
typedef long Tag;
typedef unsigned long IPTR;
struct TagItem {
Tag ti_Tag;
IPTR ti_Data;
};
#define TAG_DONE (0L)
#define TAG_END TAG_DONE
#define TAG_IGNORE (1L)
#define TAG_MORE (2L)
#define TAG_DUMMY (64L)
#endif
#ifndef TRUE
#define TRUE (~0)
#define FALSE (0)
#endif
#define GAP_RAND_MAX 0x7ffffffd
/* Tags for CreatePopulation.
*
*/
#define POP_Init (TAG_DUMMY+0x01) /* Initialization function. */
#define POP_Destruct (TAG_DUMMY+0x02) /* Destructor function. */
#define POP_Cache (TAG_DUMMY+0x03) /* Cache? Defaults to TRUE. */
/* Tags for Evolve(). These define different parameters of the evolution
* of the Polyphant population.
*/
#define EVL_Evaluator (TAG_DUMMY+0x01) /* Fitness function, _REQUIRED_ */
#define EVL_Mutator (TAG_DUMMY+0x02) /* Mutator function */
#define EVL_Crosser (TAG_DUMMY+0x03) /* Crossover function */
#define EVL_Elite (TAG_DUMMY+0x04) /* No. of Elite individuals to copy without modification */
#define EVL_Dump (TAG_DUMMY+0x05) /* Dump the worst individuals */
#define EVL_Select (TAG_DUMMY+0x06) /* Select type */
#define EVL_Stats (TAG_DUMMY+0x07) /* Generate statistics (Defaults to TRUE) */
#define EVL_PreMutate (TAG_DUMMY+0x08) /* Mutate before generating new individuals (Defaults to FALSE) */
#define EVL_Newbies (TAG_DUMMY+0x09) /* No. of new individuals to generate. */
#define EVL_Flags (TAG_DUMMY+0x0A) /* Mode of operation Flags */
#define EVL_Mensurator (TAG_DUMMY+0x0B) /* Measures the distance 'twixt individuals */
#define EVL_Crowding (TAG_DUMMY+0x0C) /* Use crowding replacement */
#define EVL_InitDumped (TAG_DUMMY+0x0D) /* If EVL_Dump>0, re-initialize dumped individuals. */
#define EVL_EraseBest (TAG_DUMMY+0x0E) /* If EVL_Newbies>0, replace the best individuals. */
#define EVL_Transcriber (TAG_DUMMY+0x0F) /* Transcription function. */
#define EVL_Thermostat (TAG_DUMMY+0x10) /* Regulates selection 'temperature'. */
/* For EVL_Select */
#define DRANDOM 1L /* Double Random */
#define FITPROP 2L /* Fitness Proportionate */
#define SIGMA 3L /* Sigma Scaled Selection */
#define TOURNAMENT 4L /* Tournament Selection */
#define INORDER 5L /* Sorted in order of fitness */
#define TEMPERATURE 6L /* Temperature-dependant selection eg. Boltzmann */
#define UNIVERSAL 7L /* Stochastic Universal selection */
/* For POP_Init */
#define ZERO_INIT 0L /* Zeroed bits */
#define RAND_INIT 1L /* Random bits */
/* For EVL_Flags */
#define FLG_InitDumped (1L<<0)
#define FLG_EraseBest (1L<<1)
#define FLG_Crowding (1L<<2)
#define FLG_Statistics (1L<<3)
#define UnitedKingdomFlag (1L<<31)
/* Structures */
struct Popstat {
double AverageFitness; /* Average fitness of population. */
double MedianFitness; /* Median fitness of the population. */
double TypeFitness; /* Type fitness value (Most common) */
long TypeCount; /* Countvalue for type fitness */
double StdDeviation; /* Standard deviation */
double MaxFitness; /* Fitness of the fittest individual. */
double MinFitness; /* Fitness of the least fit individual. */
void *Max; /* Pointer to the fittest individual. */
long Generation;
};
struct Population {
long NumPolys;
long Generation;
long Flags;
struct Popstat Stat;
long Bytes;
void *Polys;
void *Magic;
};
extern int EnterGAP(int);
extern void Crossover(void *Ind1,void *Ind2,const long int At,const long int Size);
extern void Flip(void *Individual,const long int At);
extern int Testbit(void *Individual,long int At);
extern void InitRand(const long int);
extern unsigned long int Rnd(const long int Max);
extern double InRand(const double From,const double To);
extern double GaussRand(const double My,const double Sigma);
extern double PoissonRand(const double My);
extern struct Population *CreatePopulation(const long int NumIndividuals,const long int Size,struct TagItem *);
extern struct Population *CreatePopulationT(const long int NumIndividuals,const long int Size,...);
extern struct Population *Evolve(struct Population *OldPop,struct TagItem *);
extern struct Population *EvolveT(struct Population *,...); /* Varargs interface to Evolve() */
extern void DeletePopulation(struct Population *Pop);
extern void *PopMember(struct Population *,const long int);
extern double IRange(const unsigned long int,const double,const double);
extern unsigned long int HammingDist(void *,void *,const int);
#endif